package com.cskaoyan.javase.oop1._13block._1building._3notice;

/**
 * 注意事项
 * 一些使用构造代码块需要注意的地方：
 *      1.建议应该将构造代码块，放在成员变量的声明和显式赋值语句的下面：
 *          a.一方面，如果构造代码块赋值在上，成员变量声明在下，逻辑上会很奇怪。
 *          b.另一方面，如果对象中成员变量的赋值，依赖于构造代码块和显式赋值的代码书写顺序，容易引发错误。
 * 当然如果你是为了出题，本身就存在为难的意味，不在此限制内。正常写代码不这么做即可！
 *
 *      2.因为构造代码块最终会加入构造器，所以构造代码块当中也可以使用this关键字，指向当前对象。
 *      但是实际使用价值和意义不大，仅作了解。
 *      当然这个thi是肯定不能用于调用构造器
 *
 *      3.不要有以下观念:
 *          构造代码块中定义的变量就是成员变量
 *          构造代码块当中,大括号之间,仍然属于局部位置
 *          定义的变量是局部变量
 *          之所以能够给成员变量赋值,是因为this
 *
 *
 * @since 15:17
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
}

class A {
    int num = 10;

    {
        num = 666;
        // 构造代码块当中,实际上和构造方法的方法体类似,都可以用this关键字
        System.out.println(this.num);
        test();
        // this();
        // 定义局部变量
        int a = 10;
    }

    public void test() {
    }
}